/*
 * @Author: MB's X13 374870361@qq.com
 * @Date: 2024-05-16 11:43:44
 * @LastEditors: MB's X13 374870361@qq.com
 * @LastEditTime: 2024-05-16 11:53:29
 * @Description:
 */
package ch2_array

import (
	"fmt"
	"reflect"
)

// 定义全局数组
var g_arr1 [5]int
var g_arr2 [5]int = [5]int{1, 2, 3, 4, 5}
var g_arr3 = [...]int{1, 2, 3, 4, 5, 6}

// 字符串数组？
var g_str = [5]string{3: "hello world", 4: "tom"}

// 一维数组
func Print() {

	// 定义局部数组
	a := [3]int{1, 2}           // 未初始化元素值为 0。
	b := [...]int{1, 2, 3, 4}   // 通过初始化值确定数组长度。
	c := [5]int{2: 100, 4: 200} // 使用索引号初始化元素。
	d := [...]struct {
		name string
		age  uint8
	}{
		{"user1", 10}, // 可省略元素类型。
		{"user2", 20}, // 别忘了最后一行的逗号。
	}

	fmt.Println(g_arr1, g_arr2, g_arr3, g_str)
	fmt.Println(a, b, c, d)
}

func Test01() {
	// 定义一个整型数组
	var arr [5]int = [5]int{1, 2, 3, 4, 5}

	// 使用for循环遍历数组
	for i := 0; i < len(arr); i++ {
		fmt.Println(arr[i])
	}
}

func Test02() {
	// 定义一个字符串数组
	var arr [3]string = [3]string{"apple", "banana", "cherry"}

	// 使用for-range循环遍历数组
	for index, value := range arr {
		fmt.Println("Index:", index, "Value:", value)
	}

	// 使用for-range循环遍历数组
	for _, value := range arr {
		fmt.Println(value)
	}

}

func TestReflect() {
	// 定义一个整型数组
	var arr [2]int = [2]int{10, 20}

	// 反射获取反射类型对象
	rv := reflect.ValueOf(arr)

	// 检查是否是数组
	if rv.Kind() == reflect.Array {
		for i := 0; i < rv.Len(); i++ {
			fmt.Println(rv.Index(i).Interface())
		}
	}
}

// 多维数组
func PrintMulti() {
	// 详情见另外一个包 ch2_multi_array 里的代码
}
